package aOrganizar;

import java.util.Date;

import excepciones.ComprarException;
import excepciones.ReservarException;
import fechas.FechaUtils;

/**
 * 
 * @author Braghini Marcos
 * 
 */
public class Vuelo {

	private String codigoDeVuelo;
	private String origen;
	private String destino;
	private Date llegada;
	private Date salida;
	private Integer vendidos;
	private Aerolinea aerolinea;

	/**
	 * 
	 * @param asiento
	 * @param usuario
	 * @throws ComprarException
	 */
	public void comprar(Asiento asiento, Usuario usuario)
			throws ComprarException {
		aerolinea.comprar(asiento, usuario);
		usuario.registraCompra(asiento);
		vendidos++;

	}

	/**
	 * 
	 * @return
	 */
	public Date duracion() {
		return FechaUtils.duracionIntervalo(llegada, salida);

	}

	// Constructors
	/**
	 * Crea un nuevo vuelo, el cual tiene 0 asientos vendidos.
	 * 
	 * @param codigoDeVuelo
	 * @param llegada
	 * @param salida
	 * @param aerolinea
	 */
	public Vuelo(String codigoDeVuelo, String origen, String destino,
			Date llegada, Date salida, Aerolinea aerolinea) {
		this.codigoDeVuelo = codigoDeVuelo;
		this.origen = origen;
		this.destino = destino;
		this.llegada = llegada;
		this.salida = salida;
		this.aerolinea = aerolinea;
		this.vendidos = 0;
	}

	public Vuelo(String codigoDeVuelo, Date llegada, Date salida,
			Aerolinea aerolinea) {
		this.codigoDeVuelo = codigoDeVuelo;
		this.llegada = llegada;
		this.salida = salida;
		this.aerolinea = aerolinea;
		this.vendidos = 0;
	}

	// Getters
	public String getCodigo() {
		return codigoDeVuelo;
	}

	public Date getLlegada() {
		return llegada;
	}

	public Date getSalida() {
		return salida;
	}

	public Integer getVendidos() {
		return vendidos;
	}

	public Aerolinea getAerolinea() {
		return aerolinea;
	}

	public Double getRecargoImpuestosAerolinea() {
		return aerolinea.getRecargo();

	}

	public String getOrigen() {
		return origen;
	}

	public String getDestino() {
		return destino;
	}

	// Metodo para reservar, en caso de que no lo permitan los adapter de la
	// aerolinea, lanzo excepcion.
	public void reservar(Asiento asiento, Usuario usuario)
			throws ReservarException {
		this.aerolinea.reservar(asiento, usuario);
	}

}
